package models; import utilities.Utilities; public class Operation { public static Polynomial addition(final Polynomial a, final Polynomial b) { int degree = Utilities.maxDegree(a.getDegree(), b.getDegree()); Polynomial c = new Polynomial(degree); int coeffC[] = new int[c.getDegree() + 1]; for (int i = 0; i < a.getDegree() + 1; i++) { coeffC[i] += Utilities.getIntElement(a, i); } for (int i = 0; i < b.getDegree() + 1; i++) { coeffC[i] += Utilities.getIntElement(b, i); } c = new Polynomial(Utilities.transform(coeffC), coeffC.length - 1); System.out.println(coeffC); c.setDegree(c.getDegree()); return c; } public static Polynomial subtract(final Polynomial a, final Polynomial b) { int degree = Utilities.maxDegree(a.getDegree(), b.getDegree()); Polynomial c = new Polynomial(degree); int coeffC[] = new int[c.getDegree() + 1]; for (int i = 0; i < a.getDegree() + 1; i++) { coeffC[i] += Utilities.getIntElement(a, i); } for (int i = 0; i < b.getDegree() + 1; i++) { coeffC[i] -= Utilities.getIntElement(b, i); } c = new Polynomial(Utilities.transform(coeffC), coeffC.length - 1); c.setDegree(c.getDegree()); System.out.println(coeffC); return c; } public static Polynomial multiply(final Polynomial a, final Polynomial b) { int degree = a.getDegree() + b.getDegree(); Polynomial c = new Polynomial(degree); int[] coeffC = new int[c.getDegree() + 1]; for (int i = 0; i <= a.getDegree(); i++) { for (int j = 0; j <= b.getDegree(); j++) { coeffC[i + j] += (Utilities.getIntElement(a, i) * Utilities.getIntElement(b, j)); } } c = new Polynomial(Utilities.transform(coeffC), coeffC.length - 1); c.setDegree(c.getDegree()); System.out.println(coeffC); return c; } public static Polynomial multiplyByScalar(final Polynomial a, final int x) { Polynomial c = new Polynomial(a.getDegree()); int coeffC[] = new int[a.getDegree() + 1]; for (int i = 0; i <= a.getDegree(); i++) { coeffC[i] += ((Utilities.getIntElement(a, i)) * x); } c = new Polynomial(Utilities.transform(coeffC), coeffC.length - 1); c.setDegree(c.getDegree()); return c; } public static int evaluate(final Polynomial a, final int x) { int value = 0; for (int i = a.getDegree(); i >= 0; i--) { value = value + (Utilities.getIntElement(a, i)) + (x * value); } return value; } public static Polynomial derivation(Polynomial a) { Polynomial c = new Polynomial(a.getDegree() - 1); int coeffC[] = new int[a.getDegree() + 1]; for (int i = 1; i < a.getDegree() + 1; i++) { coeffC[i - 1] = ((Utilities.getIntElement(a, i)) * i); } if (a.getDegree() == 0) { c = new Polynomial(0); } else { c = new Polynomial(Utilities.transform(coeffC), coeffC.length - 2); } c.setDegree(c.getDegree()); return c; } public static Polynomial integration(Polynomial a) { Polynomial c = new Polynomial(a.getDegree() + 1); double coeffC[] = new double[c.getDegree() + 1]; for (int i = 0; i < a.getDegree() + 1; i++) { coeffC[i + 1] = Utilities.round((double) (Utilities.getIntElement(a, i) / (double) (i + 1)), 2); } Coefficient[] coeff = new RealCoefficient[coeffC.length]; for (int i = 0; i < coeffC.length; i++) { if (i == 0) { coeff[0] = new RealCoefficient(0); } else { coeff[i] = new RealCoefficient(coeffC[i]); } } c = new Polynomial(coeff, coeff.length - 1); c.setDegree(c.getDegree()); return c; } }